home *** CD-ROM | disk | FTP | other *** search
Modula Definition | 1994-02-01 | 3.7 KB | 94 lines |
- DEFINITION MODULE Granule;
-
- (*
- * Dieses Modul ist eine alternative Speicherverwaltung zu Storage.
- * Der Vorteil ist, daß sie für Blöcke in 16-Byte-Portionen optimiert
- * ist und fast keinen Verwaltungs-Overhead hat.
- *
- * Sie ist u.U. auch schneller als Storage. Allerdings erkennt sie
- * nicht, welche Blöcke zusammengehören - das Anwendungsprogramm muß
- * selbst genau darauf achten, wieviel es alloziert hatte, wenn es einen
- * Bereich wieder freigeben will. DEALLOCATE (x, 0) ist also hier nicht
- * erlaubt - es muß immer exakt die Größe des belegten Bereichs angegeben
- * werden.
- *
- * Granule wurde speziell für den GME entwickelt. Der GME verwaltet jede
- * einzelne Zeile über dieses Modul in einem eigens allozierten Block.
- *
- * Ob Granule oder Storage für Ihre Anwendung besser geeignet ist,
- * probieren Sie am Besten in der Praxis aus.
- * Um die Funktionen 'CreateHeap', 'SetDefaultSize' usw. brauchen Sie sich
- * dabei nicht unbedingt zu kümmern - sie dienen nur Optimierungszwecken.
- *
- * Hinweis:
- * Die aktuelle Implementation dieses Moduls benutzt bei TT- und Falcon-
- * Rechnern nur das langsamere ST-RAM, also kein TT-RAM.
- * Wen das stört, setze sich mit Th. Tempelmann in Verbindung oder siehe
- * die Notizen vom Source des Moduls (die Quelltexte aller Module sind
- * ebenfalls dort zu bekommen). Der Nachteil wäre dann allerdings, daß ca.
- * 100 KB zusätzlich ungenutzt belegt werden müßten, falls TT-RAM verfügbar
- * ist.
- *)
-
- FROM SYSTEM IMPORT ADDRESS;
-
-
- PROCEDURE ALLOCATE (VAR adr: ADDRESS; bytes: LONGCARD);
- (* Belegt Speicher ab adr mit bytes Bytes. Wenn Dynamic = TRUE
- * (siehe Prozedur Dynamic) wird bei einem Heapüberlauf ein weiteres
- * Speichersegment angefordert und in den Heap integriert. Wenn FALSE
- * oder kein Speicher mehr zu Verfügung steht, wird adr NIL gesetzt.
- *)
-
- PROCEDURE DEALLOCATE (VAR addr: ADDRESS; bytes: LONGCARD);
- (* Gibt den Speicher wieder frei. 'bytes' muß den selben Wert haben,
- * mit dem der Speicher für 'addr' vorher belegt wurde.
- * (werden NEW und DISPOSE verwendet, wird dafür automatisch Sorge getragen).
- *)
-
- PROCEDURE Shrink (VAR adr: ADDRESS; amount: LONGCARD; VAR size: LONGCARD);
- (* Gibt mit allocate belegten Speicher frei.
- * 'amount' ist die Anzahl, um die der Block verkleinert werden soll,
- * 'size' muß beim Aufruf mit der alten Größe besetzt sein und enthält
- * hinterher die neue Größe.
- * Der freizugebende Teil wird am Ende des Blocks abgezwackt und für
- * neue ALLOCATEs zur Verfügung gestellt.
- *)
-
- PROCEDURE CreateHeap (bytes: LONGCARD): INTEGER;
- (* Installiert den Heap mit bytes Byte. Liefert einen Fehlercode mit
- * folgender Bedeutung:
- *
- * 0 = Kein Fehler, Heap wurde installiert
- * -1 = Kein Speicher in ausreichender Größe zur Verfügung
- * -2 = Heap ist bereits installiert
- *
- * Wird kein Heap installiert, wird beim ersten ALLOCATE-Aufruf
- * automatisch ein Heap v. 64KB erzeugt.
- *)
-
- PROCEDURE Dynamic (dyn: BOOLEAN);
- (* Schaltet die Dynamic-Option des Heaps.
- * TRUE = ALLOCATE fordert bei Heapüberlauf neues Speichersegment an.
- * FALSE = ALLOCATE liefert bei Heapüberlauf immer NIL
- *)
-
- PROCEDURE SetDefaultSize (size: LONGCARD);
- (* Setzt die Standard-Heapgröße, um die der Heap erweitert wird,
- * wenn er bei "dynamic=TRUE" um ein neues Segment erweitert werden muß.
- * Der Default ist 64 KB
- *)
-
- PROCEDURE Free (): LONGCARD;
- (* Liefert Anzahl der Bytes, die auf dem bereits angelegten Heap noch
- * frei sind.
- *)
-
- PROCEDURE MemAvail (): LONGCARD;
- (* liefert die Anzahl aller freien Bytes sowohl im Heap, als auch im
- * noch nicht allozierten Speicher - abzüglich der GEMDOS-Reserve
- * (Konstante GEMReserve, z.Zt. 64KB)
- *)
-
- END Granule.
-